package backtype.storm.topology;

import backtype.storm.generated.GlobalStreamId;
import backtype.storm.generated.Grouping;
import backtype.storm.grouping.CustomStreamGrouping;
import backtype.storm.tuple.Fields;

public interface InputDeclarer<T extends InputDeclarer> {
	public T fieldsGrouping(String componentId, Fields fields);

	public T fieldsGrouping(String componentId, String streamId, Fields fields);

	public T globalGrouping(String componentId);

	public T globalGrouping(String componentId, String streamId);

	public T shuffleGrouping(String componentId);

	public T shuffleGrouping(String componentId, String streamId);

	public T localOrShuffleGrouping(String componentId);

	public T localOrShuffleGrouping(String componentId, String streamId);
	
	public T localFirstGrouping(String componentId);

	public T localFirstGrouping(String componentId, String streamId);

	public T noneGrouping(String componentId);

	public T noneGrouping(String componentId, String streamId);

	public T allGrouping(String componentId);

	public T allGrouping(String componentId, String streamId);

	public T directGrouping(String componentId);

	public T directGrouping(String componentId, String streamId);

	public T customGrouping(String componentId, CustomStreamGrouping grouping);

	public T customGrouping(String componentId, String streamId,
			CustomStreamGrouping grouping);

	public T grouping(GlobalStreamId id, Grouping grouping);

}
